#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    /* 设置主窗口位置及颜色 */
    this->setGeometry(0,0,800,480);
    this->setPalette(QPalette(Qt::gray));
    this->setAutoFillBackground(true);

    /* 定时器实例化 */
    timer = new QTimer(this);

    /* 默认角度为 0 */
    angle = 0;

    /* 定时 100ms */
    timer->start(100);

    /* 信号槽连接 */
    connect(timer, SIGNAL(timeout()), this, SLOT(timerTimeOut()));
}

MainWindow::~MainWindow()
{
}

// 通过update不断刷新
void MainWindow::paintEvent(QPaintEvent *)
{
    /* 指定父对象，this 指本窗口 */
    QPainter painter(this);

    /* 设置抗锯齿，流畅转换 */
    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);

    /* 计算旋转角度 */
    if (angle++ == 360)
            angle = 0;
    /* QPixmap 类型对象 */
    QPixmap image;
    /* 加载 */
    image.load(":/images/1.png");
    /*设置图片大小 */
    QSize  size(500,500);
    QPixmap scaledImage = image.scaled(size);  // 调整大小并保存到新的 QPixmap 对象中

    // 计算图片中心位置
       int imageCenterX = scaledImage.width() / 2;
       int imageCenterY = scaledImage.height() / 2;

       // 计算窗口中心位置
       int windowCenterX = this->width() / 2;
       int windowCenterY = this->height() / 2;

       // 计算平移距离
       int translateX = windowCenterX - imageCenterX;
       int translateY = windowCenterY - imageCenterY;

       QRectF rectf(translateX, translateY, scaledImage.width(), scaledImage.height());

       painter.translate(windowCenterX, windowCenterY); // 设置旋转参考点为窗口中心
       painter.rotate(angle);
       painter.translate(-windowCenterX, -windowCenterY); // 将参考点设置回图片中心位置

       painter.drawPixmap(rectf, scaledImage, scaledImage.rect());

        /* 再画一个矩形 */
        painter.drawRect(rectf.toRect());

}

void MainWindow::timerTimeOut()
{
    /* 需要更新界面，不设置不更新 */
    this->update();
}

